// API请求基础配置
import axios from 'axios'
import { API_CONFIG } from '@/config/api'

// 创建axios实例
const request = axios.create({
  baseURL: API_CONFIG.BASE_URL, // 基础API地址
  timeout: API_CONFIG.TIMEOUT, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器 - 添加认证token和调试信息
request.interceptors.request.use(
  (config) => {
    // 从localStorage获取token并添加到请求头
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    // 开发环境下打印请求信息
    if (import.meta.env.DEV) {
      console.log('🚀 发送请求:', {
        method: config.method?.toUpperCase(),
        url: config.url,
        baseURL: config.baseURL,
        fullURL: config.baseURL + config.url,
        data: config.data,
        params: config.params,
        headers: {
          'Content-Type': config.headers['Content-Type'],
          'Authorization': config.headers.Authorization ? 'Bearer ***' : undefined
        }
      })
    }

    return config
  },
  (error) => {
    console.error('❌ 请求拦截器错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器 - 统一处理响应和错误
request.interceptors.response.use(
  (response) => {
    const { data } = response

    // 开发环境下打印响应信息
    if (import.meta.env.DEV) {
      console.log('✅ 收到响应:', {
        status: response.status,
        statusText: response.statusText,
        url: response.config.url,
        data: data
      })
    }

    // 根据后端返回的数据结构进行处理
    // 只有当业务状态码成功时才算成功
    if (data.code === 200 || data.success === true) {
      return data
    } else {
      // 处理业务错误
      const errorMessage = data.message || data.msg || '请求失败'
      const error = new Error(errorMessage)
      error.code = data.code
      error.response = response
      console.error('🔴 业务错误:', error)
      return Promise.reject(error)
    }
  },
  (error) => {
    // 开发环境下打印错误详情
    if (import.meta.env.DEV) {
      console.error('❌ 响应错误详情:', {
        message: error.message,
        response: error.response,
        request: error.request,
        config: error.config
      })
    }

    // 处理HTTP错误
    if (error.response) {
      const { status, data } = error.response

      console.error(`🔴 HTTP错误 ${status}:`, data)

      switch (status) {
        case 401:
          // 未授权，清除token并跳转到登录页
          console.warn('🔐 未授权，清除登录状态')
          localStorage.removeItem('token')
          localStorage.removeItem('userInfo')
          if (window.location.pathname !== '/login') {
            window.location.href = '/login'
          }
          break
        case 403:
          error.message = '没有权限访问该资源'
          break
        case 404:
          error.message = '请求的资源不存在'
          break
        case 500:
          error.message = '服务器内部错误'
          break
        default:
          error.message = data?.message || data?.msg || `请求错误 ${status}`
      }
    } else if (error.request) {
      console.error('🌐 网络错误:', error.request)
      error.message = '网络请求失败，请检查网络连接'
    } else {
      console.error('⚙️ 配置错误:', error.message)
      error.message = '请求配置错误'
    }

    return Promise.reject(error)
  }
)

export default request